import axios from 'axios'
import {ElMessage} from 'element-plus'

import {router, loginRouter} from '@/dt-lib/plug/router/index.ts'
import {useAdminStore} from '@/dt-lib/plug/pinia/stores/admin'
import {getApiBaseUrl} from '@/dt-lib/help/env.ts'

import NProgress from 'nprogress/nprogress.js'

const config = {
    baseURL: getApiBaseUrl(),
    timeout: 30000,
    errCallback: false, // 错误时(超出2xx)自行处理错误
    headers: {
        'Content-Type': 'application/json'
    }
}


const instance = axios.create(config);

const adminStore = useAdminStore()

// 请求前拦截器
instance.interceptors.request.use(function (config) {

    if (adminStore.getAdmin.token) {
        config.headers['token'] = adminStore.getAdmin.token
    }

    let data = config.data;
    config.data = JSON.stringify({
        'api_come': "crm_pc", // 设置请求来源于crm_pc
        ...data
    })

    NProgress.start()

    return config;
}, function (error) {
    return Promise.reject(error);
});

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    NProgress.done()
    // 成功 （2xx）
    return response.data;
}, function (error) {
    NProgress.done()

    console.log(error)

    // 服务器异常，没有响应
    if (!('response' in error)) {
        ElMessage.error(error.message);
        return Promise.reject(error);
    }

    // 错误 （超出 2xx）
    // 自行处理错误
    if (error.config.errCallback) {
        return Promise.reject(error.response.data);
    }

    // 提示错误信息
    ElMessage.error(error.response.data.msg || error.message);

    switch (error.response.status) {
        // 登陆过期
        case 401:
            adminStore.delAdmin()
            router.push({name: loginRouter})
            break;
        case 500:
        default:
            break;
    }


    return Promise.reject(error.response.data);
});

export default instance